/**
 * @fileOverview 全局的消息发送接收机制，支持消息的延时发送
 * @author goodzsq@gmail.com
 */

module.exports = {
    /** 消息队列 */
    queue: [],
    /**
     * 发送消息
     * @param {String} sender 发送者
     * @param {String} receiver 接受者
     * @param {String} msg 消息
     * @param {Object} data 消息数据
     * @param {Number} delay 延时毫秒数
     */
    send: function(sender, receiver, msg, data, delay) {
        if (delay > 0) {
            //延时发送，存储到消息队列
            this.queue.push({
                s: sender,
                r: receiver,
                t: Date.now() + delay,
                m: msg,
                d: data
            });
        } else {
            //立刻发送
            var obj = gg.object(receiver);
            if (obj) {
                obj.onMessage.call(obj, sender, msg, data);
            }
        }
    },
    /**
     * 消化处理延时消息，在应用的主循环进行调用
     */
    digest: function() {
        var now = Date.now();
        var i = 0, task;
        while (task = this.queue[i]) {
            if (task.t > now) {
                i++;
            } else {
                this.send(task.s, task.r, 0, task.m, task.d);
                this.queue.splice(i, 1);
            }
        }
    }
}